package org.streets.eis.ext.analysis.internal.buildlogic;

import java.util.List;
import org.streets.database.datadict.Relation;



public class Matrix {
	
	//构造邻接矩阵邻接矩阵邻接矩阵adjacent
	/*
	*	 e1 e2 e3 e4 e5 e6 e7..........
	* e1                 |
	* e2-----------------*(i,j)
	* e3
	* e4
	* e5
	* ...
	*/
	public static int[][] createMatrix(List<String> list,List<Relation> ers) {
		
		int[][] adjMatrix = new int[list.size()][list.size()];
		
		// 自己到自己为不联通，-1
		for (int i = 0; i < list.size(); i++) {
			adjMatrix[i][i] = -1;
		}
		
		for (int i = 0; i < list.size(); i++) {
			for (int j = i + 1; j < list.size(); j++) {
				adjMatrix[i][j] = distance(list.get(i),list.get(j),ers);
				
			}
		}
		
		// 复制到下三角
		for (int i = 0; i < list.size(); i++) {
			for (int j = 0; j < i; j++) {
				adjMatrix[i][j] = adjMatrix[j][i];
			}
		}
		
		
		
		return adjMatrix;
	}
	
	private static int distance(String e1, String e2,List<Relation> ers){
		for(Relation er : ers){
			if ((er.getHostTable().equalsIgnoreCase(e1))
				&& (er.getTargetTable().equalsIgnoreCase(e2))){
				return 1;
			}
		
			if ((er.getHostTable().equalsIgnoreCase(e2))
					&& (er.getTargetTable().equalsIgnoreCase(e1))){
				return 1;
			}
		}		
		return -1;
	}
	
	public static void main(String[] args) {
		/*            e1
		 *           /  \ 
		 *          e2   e3
		 *         / \     \
		 *       e4   e5    e6 
		 *      / \    \
		 *    e7   e8   e9
		 */
		
		/*List<TableDef> list = new ArrayList<TableDef>();
		TableDef e1 = new TableDef("E1");
		TableDef e2 = new TableDef("E2");
		TableDef e3 = new TableDef("E3");
		TableDef e4 = new TableDef("E4");
		TableDef e5 = new TableDef("E5");		
		TableDef e6 = new TableDef("E6");
		TableDef e7 = new TableDef("E7");
		TableDef e8 = new TableDef("E8");
		TableDef e9 = new TableDef("E9");
		
		Relation er1_2 = new Relation();
		er1_2.setHostTable(e1.getName());
		er1_2.setTargetTable(e2.getName());
		Relation er1_3 = new Relation();
		er1_3.setParentTable(e1);
		er1_3.setChildTable(e3);
		Relation er2_4 = new Relation();
		er2_4.setParentTable(e2);
		er2_4.setChildTable(e4);

		Relation er2_5 = new Relation();
		er2_5.setParentTable(e2);
		er2_5.setChildTable(e5);
		
		Relation er4_7 = new Relation();
		er4_7.setParentTable(e4);
		er4_7.setChildTable(e7);

		Relation er4_8 = new Relation();
		er4_8.setParentTable(e4);
		er4_8.setChildTable(e8);

		Relation er5_9 = new Relation();
		er5_9.setParentTable(e5);
		er5_9.setChildTable(e9);

		Relation er3_6 = new Relation();
		er3_6.setParentTable(e3);
		er3_6.setChildTable(e6);
		
		List<Relation> ers = new ArrayList<Relation>();
		ers.add(er1_2);
		ers.add(er1_3);
		ers.add(er2_4);
		ers.add(er2_5);
		ers.add(er3_6);
		ers.add(er4_7);
		ers.add(er4_8);
		ers.add(er5_9);
		
		list.add(e1);
		list.add(e2);
		list.add(e3);
		list.add(e4);
		list.add(e5);
		list.add(e6);
		list.add(e7);
		list.add(e8);
		list.add(e9);
		
		int[][] adjMatrix = createMatrix(list,ers);
		
		for (int i = 0; i < list.size(); i++) {
			for (int j = 0; j < list.size(); j++) {
				System.err.println("["+i+","+j+"]"+adjMatrix[i][j]); 
			}
		}
		
		*/
		
		
	}

}
